package com.heima.common.swagger;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration//将该类标记为Spring配置类，Spring会自动识别并应用此配置
@EnableSwagger2//启用Swagger2的支持，使得Spring Boot应用能够生成Swagger文档
//Spring Boot应用中的Swagger配置类，用于生成和展示API文档
public class SwaggerConfiguration {

   //构建API文档
   @Bean//表明该方法将返回一个Spring管理的Bean，这里返回一个Docket实例
   public Docket buildDocket() {
      //创建一个Swagger 2的Docket实例，Docket是Swagger的核心配置对象
      return new Docket(DocumentationType.SWAGGER_2)
              //为Docket实例设置API信息，包括标题、描述、联系人、版本等
              .apiInfo(buildApiInfo())
              //开始配置扫描API的规则
              .select()
              // 要扫描的API(Controller)基础包
              //指定要扫描的基础包，这里指定所有位于com.heima包及其子包中的控制器（API）
              .apis(RequestHandlerSelectors.basePackage("com.heima"))
              //指定要扫描的路径规则，这里表示扫描所有路径
              .paths(PathSelectors.any())
              //完成配置并构建Docket实例
              .build();
   }

   //构建API信息,这是swagger的描述性文档
   //为Docket实例设置API信息，包括标题、描述、联系人、版本等
   private ApiInfo buildApiInfo() {
      //创建一个联系人对象，这里仅设置了联系人的名字，但未设置其他的联系信息
      Contact contact = new Contact("她说","","2815648711@qq.com");
      //用于构建ApiInfo对象，ApiInfo包含了API文档的标题、描述、版本和联系信息等
      return new ApiInfoBuilder()
              //标题
              .title("灵犀资讯-平台管理API文档")
              //描述
              .description("灵犀资讯后台api")
              //联系人信息
              .contact(contact)
              //版本信息
              .version("1.0.0").build();
   }
}